/*    
    OpenMheg - A free MHEG-5 library
    Copyright (C) 2008 Dharmesh Malam

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Engine;
using System.Xml;

namespace Core.Parser
{
    public static class MHEGParser
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType );

        public static Group ParseMHEG ( String groupPath)
       {
           FileInfo fileInfo = new FileInfo(groupPath);

           if (fileInfo.Exists)
           {
               //  try
               //  {

               Group group;
               IParser parser = null;// = new ASN1Parser.ASN1Parser();

               using (BufferedStream stream =  new BufferedStream( new FileStream(fileInfo.FullName, FileMode.Open)))
               {
                   group = parser.Parse(stream);
               }
                              
               group.GroupContentFile = fileInfo;
               log.Info("Engine loaded external object " + groupPath + ".");

               return group;

               //  }
               //  catch ( Exception e )
               //  {
               //   log.Error( "Engine could not load external object " + groupPath, e );

               //      return null;
               //  }

           }
           else
               return null;
            /*
            FileInfo fileInfo = new FileInfo( groupPath );

            if ( fileInfo.Exists )
            {
              //  try
              //  {

                
                String tempFile = Path.GetTempFileName();


                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.EnableRaisingEvents=false;
                proc.StartInfo.FileName = Environment.CurrentDirectory + @"\Resources\Asn2Xml\ans2Xml.bat";
                proc.StartInfo.Arguments = "\""+groupPath +"\" \""+tempFile+"\"";
                proc.StartInfo.WorkingDirectory = Environment.CurrentDirectory + @"\Resources\Asn2Xml\";
                                
                proc.Start();
                proc.WaitForExit();
                proc.Dispose();
                    

                    XmlDocument doc = new XmlDocument();
                    Group group;
                    using ( FileStream stream = new FileStream( tempFile, FileMode.Open ) )
                    {
                        doc.Load( stream );
                        //doc.Load( groupPath );
                        stream.Close();
                    }

                    File.Delete( tempFile );
                    
                    group = Builder.BuildGroup( doc );
                    group.GroupContentFile = fileInfo;
                    log.Info( "Engine loaded external object " + groupPath +"." );
                        
                    return group;

              //  }
              //  catch ( Exception e )
              //  {
                 //   log.Error( "Engine could not load external object " + groupPath, e );
                                    
              //      return null;
              //  }
                
            }
            else
                return null;
            */
        }

        public static Group ParseMHEG ( FileInfo file )
        {
            return ParseMHEG( file.FullName );
        }
    }
}
